// pages/seal/order/order.js
import config from '../../../utils/config';
import PaymentUtil from '../../../utils/payment';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    phone: "",
    index:0,
    addressees: [],
    totalPrice: "0.00",
    orderId: null,
    orderDeleted: false,
    remark: "",
    addressIds: [], // 新增：存储地址ID列表
    isPromiseChecked: false, // 仅保留勾选状态
    showPrivacyModal: false,
    privacyPolicy: `本人 / 本单位 ，现委托贵司办理在线刻章业务。为明确双方权利义务，保障贵司合法权益，本人 / 本单位特作出如下承诺：​
    一、信息真实性承诺​
    本人 / 本单位向贵司提供的用于刻章的所有信息，包括但不限于营业执照副本、法人身份证、个人身份证等相关证件及信息，均真实、准确、完整，不存在任何虚假、伪造或隐瞒的情况。如因提供的信息不真实、不准确或不完整而导致任何问题或纠纷，一切责任由本人 / 本单位承担，与贵司无关。​
    二、用章合法性承诺​
    本人 / 本单位委托贵司刻制的印章，仅用于合法合规的经营活动、文件签署、业务办理等正当用途，绝不用于任何违法犯罪活动，包括但不限于诈骗、伪造合同、非法经营等。​
    如本人 / 本单位使用所刻制的印章从事任何违法违规活动，由此产生的一切法律责任、经济损失和不良后果，均由本人 / 本单位自行承担，贵司不承担任何责任。若因此给贵司造成损失的，本人 / 本单位将全额赔偿。​
    三、自身行为责任承诺​
    本人 / 本单位将妥善保管所刻制的印章，采取必要的安全措施防止印章遗失、被盗或被他人冒用。如发生印章遗失、被盗或被冒用等情况，本人 / 本单位将立即采取补救措施（如登报声明作废、向公安机关报案等），并承担由此产生的一切责任和损失，与贵司无关。​
    因本人 / 本单位对印章使用管理不当，导致他人滥用印章引发的任何纠纷和损失，均由本人 / 本单位承担全部责任，贵司无需承担任何责任。​
    四、其他事项承诺​
    本人 / 本单位已仔细阅读并充分理解贵司提供的《在线刻章风险说明》，知晓在线刻章过程中可能存在的各种风险，并自愿承担因自身原因导致的相关风险及后果。​
    本承诺书是本人 / 本单位的真实意思表示，对本人 / 本单位具有法律约束力。​`
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 接收传递的价格参数
    if (options.selections) {
      try {
        const selections = JSON.parse(options.selections);
        this.setData({
          totalPrice: selections.totalPrice || "0.00"
        });
      } catch (e) {
        console.error('解析选择数据失败:', e);
      }
    } else if (options.price) {
      this.setData({
        totalPrice: options.price
      });
    }

    if (options.orderId) {
      this.setData({
        orderId: options.orderId
      });
      // 设置页面标题
      wx.setNavigationBarTitle({
        title: '订单支付'
      });
    }

    const token = wx.getStorageSync('token');
    const cacheUserInfo = wx.getStorageSync('userInfo');
    
    // 设置用户电话
    if (cacheUserInfo && cacheUserInfo.phone) {
      this.setData({
        phone: cacheUserInfo.phone
      });
    }

    wx.request({
      url: `${config.baseUrl}/getUserAddress`,
      method: 'GET',
      header: {
        Authorization : token
      },
      success: (res) => {
        if (res.data && res.data.code === 200) {

          console.log(res.data.data)
          
          // 处理收货地址数据
          const addressList = res.data.data;
          const formattedAddresses = [];
          const addressIds = [];
          let checkedIndex = 0;
          
          // 遍历地址列表，拼接name和phone，并保存id
          if (Array.isArray(addressList) && addressList.length > 0) {
            addressList.forEach((address, idx) => {
              formattedAddresses.push(address.name + ' ' + address.phone);
              addressIds.push(address.id);
              
              // 如果当前地址是选中的，更新index值
              if (address.checked) {
                checkedIndex = idx;
              }
            });
          }
          
          // 更新数据
          this.setData({ 
            addressees: formattedAddresses,
            addressIds: addressIds,
            index: checkedIndex
          });
        }
      }
    });
  },

  bindPickerChange: function(e) {
    console.log('picker发送选择改变，携带值为', e.detail.value)
    this.setData({
      index: e.detail.value
    })
  },

  // 处理备注输入
  onRemarkInput: function(e) {
    this.setData({
      remark: e.detail.value
    });
  },

  // 删除订单方法
  deleteOrderAndGoBack(cb) {
    if (!this.data.orderId || this.data.orderDeleted) {
      if (cb) cb();
      return;
    }
    const token = wx.getStorageSync('token');
    wx.request({
      url: `${config.baseUrl}/seal/deleteOrder`,
      method: 'POST',
      header: {
        'Authorization': token,
        'content-type': 'application/json'
      },
      data: {
        orderId: this.data.orderId
      },
      success: (res) => {
        this.setData({ orderDeleted: true });
        if (cb) cb();
      },
      fail: () => {
        if (cb) cb();
      }
    });
  },

  // 返回上一步
  goBack() {
    // 如果是现有订单支付，直接返回
    if (this.data.orderId) {
      wx.navigateBack();
    } else {
      // 如果是新订单，删除订单后返回
      this.deleteOrderAndGoBack(() => {
        wx.navigateBack();
      });
    }
  },

  // 处理支付
  async handlePayment() {
    if (!this.data.isPromiseChecked) {
      wx.showToast({ title: '请先同意承诺书', icon: 'none' });
      return;
    }
    try {
      if (!this.validatePaymentInfo()) return;

      wx.showLoading({ title: "正在创建订单...", mask: true });

      const token = wx.getStorageSync("token");
      const userInfo = wx.getStorageSync("userInfo");
      if (!token || !userInfo) {
        wx.hideLoading();
        wx.showToast({ title: "请先登录", icon: "none" });
        return;
      }

      const orderData = {
        orderId: this.data.orderId,
        phone: this.data.phone,
        totalPrice: this.data.totalPrice,
        addressId: this.data.addressIds
          ? this.data.addressIds[this.data.index]
          : 0,
        remark: this.data.remark || "",
        openid: wx.getStorageSync("openId"),
      };

      // 创建订单并获取支付参数
      const res = await PaymentUtil.createOrder(orderData, token);
      
      if (!res) {
        wx.hideLoading();
        wx.showToast({ title: "创建订单失败", icon: "none" });
        return;
      }
      
      // 检查返回结果是否包含错误信息
      if (res.code && res.code !== 200) {
        wx.hideLoading();
      
        // 延迟显示弹窗，确保toast显示完成
        setTimeout(() => {
          wx.showModal({
            title: '支付失败',
            content: res.msg || '创建订单失败',
            showCancel: false,
            confirmText: '返回',
            success: (modalRes) => {
              // 返回上个页面
              wx.navigateBack();
            },
            fail: (err) => {
              // 如果弹窗失败，直接返回
              wx.navigateBack();
            }
          });
        });
        
        return;
      }
      
      const payData = res.data; // 从 res.data 中获取支付数据
      // 如果是现有订单，使用原有的orderId
      if (this.data.orderId) {
        payData.orderId = this.data.orderId;
      }
      this.setData({ orderId: payData.orderId });

      // 调用微信支付
      wx.requestPayment({
        timeStamp: payData.timeStamp,
        nonceStr: payData.nonceStr,
        package: payData.package,
        signType: payData.signType,
        paySign: payData.paySign,
        success: () => {
          wx.showToast({ title: "支付成功", icon: "success" });
          // 支付成功后跳转到订单详情页面
          setTimeout(() => {
            wx.redirectTo({
              url: `/pages/seal/orderDetail/orderDetail?orderId=${payData.orderId}`,
            });
          }, 1500);
        },
        fail: (err) => {
          let errorMsg = '支付失败，请重试';
          if (err.errMsg && err.errMsg.includes('cancel')) {
            errorMsg = '支付已取消';
          }
          
          wx.showModal({
            title: "支付失败",
            content: errorMsg,
            showCancel: true,
            cancelText: '返回',
            confirmText: '重新支付',
            success: (modalRes) => {
              if (modalRes.confirm) {
                // 重新支付
                this.handlePayment();
              } else {
                // 返回上个页面
                wx.navigateBack();
              }
            },
          });
        },
        complete: () => {
          wx.hideLoading();
        },
      });
    } catch (error) {
      wx.hideLoading();
      wx.showModal({
        title: '支付失败',
        content: error.message || '支付异常，请重试',
        showCancel: false,
        confirmText: '返回',
        success: () => {
          // 返回上个页面
          wx.navigateBack();
        }
      });
    }
  },

  // 验证支付信息
  validatePaymentInfo() {
    if (!this.data.phone || this.data.phone.trim() === '') {
      wx.showToast({
        title: '请输入联系电话',
        icon: 'none'
      });
      return false;
    }

    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(this.data.phone)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      });
      return false;
    }

    if (!this.data.addressees || this.data.addressees.length === 0) {
      wx.showToast({
        title: '请添加收件地址',
        icon: 'none'
      });
      return false;
    }

    if (!this.data.totalPrice || parseFloat(this.data.totalPrice) <= 0) {
      wx.showToast({
        title: '订单金额无效',
        icon: 'none'
      });
      return false;
    }

    return true;
  },

  // 支付成功处理
  handlePaymentSuccess() {
    PaymentUtil.showPaymentResult(true, '支付成功', () => {
      // 跳转到订单详情页面
      wx.redirectTo({
        url: `/pages/seal/orderDetail/orderDetail?orderId=${this.data.orderId}`
      });
    });
  },

  // 支付失败处理
  handlePaymentFail(err) {
    const errorMsg = PaymentUtil.getPaymentErrorMessage(err);
    
    PaymentUtil.showPaymentResult(false, errorMsg, () => {
      // 支付失败后，可以选择重新支付或返回
      wx.showModal({
        title: '提示',
        content: '是否重新支付？',
        success: (res) => {
          if (res.confirm) {
            // 重新支付
            this.handlePayment();
          }
        }
      });
    });
  },

  // 跳转到添加地址页面
  goAddAddress() {
    wx.navigateTo({
      url: `/pages/saveAddress/saveAddress?fromOrder=1&orderId=${this.data.orderId}&price=${this.data.totalPrice}`
    });
  },

  // 刷新地址列表
  refreshAddressList() {
    const token = wx.getStorageSync('token');
    wx.request({
      url: `${config.baseUrl}/getUserAddress`,
      method: 'GET',
      header: {
        Authorization : token
      },
      success: (res) => {
        if (res.data && res.data.code === 200) {
          const addressList = res.data.data;
          const formattedAddresses = [];
          const addressIds = [];
          let checkedIndex = 0;
          const newAddressId = wx.getStorageSync('newAddressId');
          if (Array.isArray(addressList) && addressList.length > 0) {
            addressList.forEach((address, idx) => {
              formattedAddresses.push(address.name + ' ' + address.phone);
              addressIds.push(address.id);
              if (newAddressId && address.id === newAddressId) {
                checkedIndex = idx;
              } else if (!newAddressId && address.checked) {
                checkedIndex = idx;
              }
            });
          }
          this.setData({ 
            addressees: formattedAddresses,
            addressIds: addressIds,
            index: checkedIndex
          });
          if (newAddressId) wx.removeStorageSync('newAddressId');
        }
      }
    });
  },

  // 在wxml中收件信息区域加上bindtap="handleAddressClick"
  handleAddressClick() {
    if (!this.data.addressees || this.data.addressees.length === 0) {
      this.goAddAddress();
    }
  },

  handleFileUpload() {
    if (this.data.orderId) {
      wx.navigateTo({
        url: `/pages/seal/fileUpload/fileUpload?orderId=${this.data.orderId}`
      });
    } else {
      wx.showToast({
        title: '订单ID缺失，无法上传材料',
        icon: 'none'
      });
    }
  },

  // 承诺书勾选事件，控制立即支付按钮可用性
  onPromiseCheck(e) {
    this.setData({ isPromiseChecked: e.detail.value.length > 0 });
  },
  // 显示承诺书弹窗（点击文字）
  showPromiseModal() {
    this.setData({ showPrivacyModal: true });
  },
  closePrivacyModal() {
    this.setData({ showPrivacyModal: false });
  },
  // 弹窗点击确定，勾选复选框并关闭弹窗
  onPromiseModalConfirm() {
    // 移除与弹窗相关的方法
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.refreshAddressList();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 用户点击左上角返回时也会触发
    // this.deleteOrderAndGoBack();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})